In an open computing environment, most software applications are usually available on a wide variety of computer hardware platforms. Often, software applications written using open computing standards such as C, C++ and JAVA can be ported to several different computer hardware platforms with very little effort. In fact, applications written entirely in JAVA require no actual porting and are categorized uniquely as "Write Once, Run Anywhere".sup.1 because they run on many platforms with little or no modification. Consequently, computer hardware manufacturers can no longer sell their computing platforms based on the availability of proprietary software applications because the software can be easily ported to many different computer hardware platforms. Instead, computer manufacturers must compete by offering computer hardware platforms with more processing power and increasingly lower costs. FNT 1. Write Once, Run Anywhere is a trademark of Sun Microsystems, Inc. in the United States and other countries. Write ONCE, Run Anywhere est une marque de fabrique ou une marque deposee de Sun Microsystems, Inc. aux Etats-Unis et dans d'autres pays.
Benchmarks are typically used to measure the processing power of a computer hardware platform. Computer manufacturers work hard to improve the execution performance of benchmarks to bolster the performance ratings of their computer hardware platforms. The importance of these benchmarks is underscored by the amount of research and development spent on optimizing compilers. These optimizing compilers can increase the execution performance of a benchmark using special compilation techniques in the optimizer without even modifying the underlying hardware. In particular, benchmarks run through an optimizing compiler can execute faster on the same hardware platform by streamlining the executable code and reducing the total number of clock-cycles per instruction (CPI) required to execute the benchmark.
These benchmark applications are also very important because they often become the basis on which a user will ultimately select a computer hardware platform. In many cases, a better optimizing compiler can make an inherently less powerful computer hardware platform appear to have equal or more processing throughput than a computer hardware platform with more theoretical overall processing power. More specifically, computer manufacturers who develop an optimizing compiler which performs special optimization techniques, suited for benchmark applications such as SPECint and SPECfp, can appear to have a more powerful computer. Conversely, the computer manufacturer who does not develop an optimizing compiler tailored to the benchmark suites used for the comparison can lose enormous sales and profit because the computer appears to execute applications or benchmarks more slowly.
Currently there is no simple method for computer manufacturers to determine if a competitor's hardware is more powerful or the benchmark has been highly optimized. Most computer manufacturers only disclose benchmarks compiled with the highest level of optimization. Outside of the benchmarks, this makes it very difficult to reliably compare the general performance characteristics of two computer hardware platforms. Even if a computer manufacturer was able to isolate specific optimization techniques used in the competitors benchmark, existing compilers could not include these optimization techniques without being significantly rewritten or redesigned. Rewriting an optimizing compiler for each benchmark is time consuming and not an economically efficient use of resources.
What is needed is a reliable technique which can analyze an executable generated for a source platform and generate a new executable for a target platform having a similar degree of optimization. This would be useful for determining the computing performance of different computer hardware platforms in a heterogeneous computing environment. It would also be useful in generating highly optimized executable benchmarks quickly and without re-writing the optimizer for a compiler.